package br.com.commercy.dominio.entidade;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.IndexColumn;
import org.hibernate.annotations.Type;

import br.com.commercy.infra.arquitetura.entidade.Entidade;

@SuppressWarnings("serial")
@Entity
@Table(name="TBL_CLIENTE")
@SequenceGenerator(name="SEQ_CLIENTE", sequenceName="SEQ_CLIENTE")
@Inheritance(strategy=InheritanceType.JOINED) 
public class Cliente implements Entidade{
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator="SEQ_CLIENTE")
	@Column(name="ID")
	private Long id;
	
	@Column(name = "OBSERVACAO")
	private String observacao;
	
	@Column(name = "OBSERVACAO_NOTA")
	private String observaoNota;
	
	@Column(name = "WEB_SITE")
	private String webSite;
	
	@Column(name = "REGIAO")
	private Integer regiao;
	
	@Column(name = "RAZAO_SOCIAL")
	private String nomeRazaoSocial;
	
	@Type(type="true_false")
	@Column(name = "INTERNACIONAL")
	private Boolean internacional;
	
	@Column(name = "INSCRICAO_ESTADUAL")
	private Long inscricaoEstadual;
	
	@Column(name = "INSCRICAO_SUFAMA")
	private Long inscricaoSufama;
	
	@Column(name = "DATA_PREF_VENCIMENTO")
	private Integer diaVencimento;
	
	@Column(name = "ATIVIDADE_SINTETICA")
	private Integer atividadeSintetica;
	
	@Column(name = "SITUACAO")
	private Integer situacao;
	
	@OneToMany(cascade=CascadeType.ALL , fetch=FetchType.LAZY)
	@JoinColumn(name="ID_CLIENTE_FK", insertable=false, updatable=false)
	private Collection<Contato> contatos;
	
	@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
	@JoinColumn(name="ID_GRUPO_EMPRESA")
	private GrupoEmpresa grupoEmpresa;
	
	@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
	@JoinColumn(name="ID_ENDERECO")
	private Collection<Endereco> enderecos;
	
	@Override
	public Serializable getIdentificador() {
		return this.id;
	}

	@Override
	public String getDescricao() {
		// TODO Auto-generated method stub
		return null;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public String getObservaoNota() {
		return observaoNota;
	}

	public void setObservaoNota(String observaoNota) {
		this.observaoNota = observaoNota;
	}

	public String getWebSite() {
		return webSite;
	}

	public void setWebSite(String webSite) {
		this.webSite = webSite;
	}

	public Integer getRegiao() {
		return regiao;
	}

	public void setRegiao(Integer regiao) {
		this.regiao = regiao;
	}

	public String getNomeRazaoSocial() {
		return nomeRazaoSocial;
	}

	public void setNomeRazaoSocial(String nomeRazaoSocial) {
		this.nomeRazaoSocial = nomeRazaoSocial;
	}

	public Boolean getInternacional() {
		return internacional;
	}

	public void setInternacional(Boolean internacional) {
		this.internacional = internacional;
	}

	public Long getInscricaoEstadual() {
		return inscricaoEstadual;
	}

	public void setInscricaoEstadual(Long inscricaoEstadual) {
		this.inscricaoEstadual = inscricaoEstadual;
	}

	public Long getInscricaoSufama() {
		return inscricaoSufama;
	}

	public void setInscricaoSufama(Long inscricaoSufama) {
		this.inscricaoSufama = inscricaoSufama;
	}

	public Integer getDiaVencimento() {
		return diaVencimento;
	}

	public void setDiaVencimento(Integer diaVencimento) {
		this.diaVencimento = diaVencimento;
	}

	public Integer getAtividadeSintetica() {
		return atividadeSintetica;
	}

	public void setAtividadeSintetica(Integer atividadeSintetica) {
		this.atividadeSintetica = atividadeSintetica;
	}

	public Integer getSituacao() {
		return situacao;
	}

	public void setSituacao(Integer situacao) {
		this.situacao = situacao;
	}

	public Collection<Contato> getContatos() {
		return contatos;
	}

	public void setContatos(Collection<Contato> contatos) {
		this.contatos = contatos;
	}

	public GrupoEmpresa getGrupoEmpresa() {
		return grupoEmpresa;
	}

	public void setGrupoEmpresa(GrupoEmpresa grupoEmpresa) {
		this.grupoEmpresa = grupoEmpresa;
	}

	public Collection<Endereco> getEnderecos() {
		return enderecos;
	}

	public void setEnderecos(Collection<Endereco> enderecos) {
		this.enderecos = enderecos;
	}


	
	

}
